package com.base.cn.platform.os.dao.course.cou.record;

import com.base.cn.platform.os.common.mybatis.BaseDao;
import com.base.cn.platform.os.entity.course.cou.record.CoursePlayRecord;
import com.base.cn.platform.os.entity.course.cou.record.UserBuyCourseStudySpeed;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


/**
 * 课程播放记录
 *
 * @author SK
 * @since 2018-06-13
 */
@Mapper
public interface CoursePlayRecordDao extends BaseDao<CoursePlayRecord> {

    /**
     * 查询用户学习了多少个课程
     * @param clazz
     * @param userId 用户ID
     * @return 已学习的课程数据
     */
    Integer queryUserStudyCourseNum(@Param("clazz") Class<CoursePlayRecord> clazz, @Param("userId") BigDecimal userId);

    /**
     * 查询用户总学习时间
     * @param clazz
     * @param params 查询条件
     * @return 学习时间
     */
    Integer queryUserStudySumTime(@Param("clazz") Class<CoursePlayRecord> clazz,
                                  @Param("params") Map<String,Object> params);

    /**
     * 查询用户课程的总学习时间列表
     * @param clazz
     * @param params 查询条件
     * @return List<CoursePlayRecord>
     */
    List<CoursePlayRecord> queryUserStudySumTimeList(@Param("clazz") Class<CoursePlayRecord> clazz,
                                                     @Param("params") Map<String,Object> params);


    /**
     * 查询用户某一周的学习时间
     * @param clazz
     * @param params 查询条件
     * @return 学习时间
     */
    Integer queryUserWeekStudySumTime(@Param("clazz") Class<CoursePlayRecord> clazz,
                                      @Param("params") Map<String,Object> params);

    /**
     * 查询用户课程的某一周的学习时间
     * @param clazz
     * @param params 查询条件
     * @return List<CoursePlayRecord>
     */
    List<CoursePlayRecord> queryUserWeekStudySumTimeList(@Param("clazz") Class<CoursePlayRecord> clazz,
                                                         @Param("params") Map<String,Object> params);


    /**
     * 查询用户对课程的学习的排行名次（根据学习时间进行排序）
     * @param clazz
     * @param params 查询条件
     * @return 排名名字
     */
    Integer queryUserStudyCourseRankings(@Param("clazz") Class<CoursePlayRecord> clazz,
                                         @Param("params") Map<String,Object> params);

    /**
     * 查询学习时间排行第一的用户ID
     * @param clazz
     * @param params 查询条件
     * @return 用户ID
     */
    BigDecimal queryUserStudyCourseRankOne(@Param("clazz") Class<CoursePlayRecord> clazz,
                                           @Param("params") Map<String,Object> params);

    /**
     * 查询用户购买的课程的完成或未完成的节点数量
     * @param clazz
     * @param params 查询条件
     * @return List<UserBuyCourseStudySpeed>
     */
    List<UserBuyCourseStudySpeed> findUserBuyCourseStudySpeed(@Param("clazz") Class<CoursePlayRecord> clazz,
                                                              @Param("params") Map<String,String> params);

    /**
     * 查询用户课程的最新播放记录
     * @param clazz
     * @param params 查询条件
     * @return List<UserBuyCourseStudySpeed>
     */
    CoursePlayRecord findUserBuyCourseStudyNew(@Param("clazz") Class<CoursePlayRecord> clazz,
                                                              @Param("params") Map<String,Object> params);

    /**
     * 查询用户的最新学习记录
     * @param clazz
     * @param userId 用户id
     * @return List<UserBuyCourseStudySpeed>
     */
    CoursePlayRecord selectUserLastPlayCourseRecord(@Param("clazz") Class<CoursePlayRecord> clazz,
                                                    @Param("userId") BigDecimal userId);
}
